package com.demo.java.OD301_350.OD303;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【统计监控、需要打开多少监控器】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146100942
 */
public class OdMain {
    static int rowCount, colCount; // 停车场的行数和列数
    static int[][] grid; // 用于存储停车场的状态
    static final int[][] DIRECTIONS = { // 方向数组，用于检查上下左右位置
            {-1, 0}, {1, 0}, {0, -1}, {0, 1}, {0, 0} // 上，下，左，右，自己
    };

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        rowCount = scanner.nextInt(); // 读取停车场的行数
        colCount = scanner.nextInt(); // 读取停车场的列数
        grid = new int[rowCount][colCount]; // 初始化停车场数组

        // 读取停车场数据
        for (int row = 0; row < rowCount; row++) {
            for (int col = 0; col < colCount; col++) {
                grid[row][col] = scanner.nextInt();
            }
        }

        int monitorCount = 0; // 记录需要开启的监控器数量

        // 遍历停车场的每个位置
        for (int row = 0; row < rowCount; row++) {
            for (int col = 0; col < colCount; col++) {
                if (grid[row][col] == 1) {
                    // 当前位置有车，必须安装监控器
                    monitorCount++;
                } else {
                    // 当前位置为空（0），检查其相邻位置是否有车
                    for (int[] direction : DIRECTIONS) {
                        int newRow = row + direction[0];
                        int newCol = col + direction[1];

                        // 确保新位置在有效范围内
                        if (newRow >= 0 && newRow < rowCount && newCol >= 0 && newCol < colCount) {
                            if (grid[newRow][newCol] == 1) {
                                monitorCount++;
                                break; // 只要发现有车，就立即跳出循环
                            }
                        }
                    }
                }
            }
        }

        // 输出结果：最少需要开启的监控器数量
        System.out.println(monitorCount);
    }
}